#include "consos.h"

void consos::Init()
{
    db = QSqlDatabase::database("user");

    id = -1;
    nom = "";
    commentaire = "";
    prix = 0.0;
    categorie = 0;
    stock = 0;
    actif = false;
}

consos::consos()
{
    Init();
}

consos::consos(int i)
{
    Init();

    id = i;

    db.transaction();

    QSqlQuery q(db);
    q.prepare("SELECT * FROM consos WHERE id=:id");
    q.bindValue(":id", id);
    q.exec();

    if(q.first())
    {
        categorie = q.value(1).toInt();
        nom = q.value(2).toString();
        commentaire = q.value(3).toString();
        motsclefs = q.value(4).toString().split(" ");
        prix = q.value(5).toDouble();
        actif = q.value(6).toBool();
        stock = q.value(7).toInt();
    }

    db.commit();
}

void consos::setActif(bool a)
{

    QSqlQuery q(db);
    q.prepare("UPDATE consos SET actif = :act WHERE id=:id");
    q.bindValue(":act", a ? 1 : 0);
    q.bindValue(":id", id);

    if(q.exec())
    {
        actif = a;
    }
}

void consos::setCategorie(int cat)
{

    QSqlQuery q(db);
    q.prepare("UPDATE consos SET categorie =:cat WHERE id=:id");
    q.bindValue(":cat", cat);
    q.bindValue(":id", id);

    if(q.exec())
    {
        categorie = cat;
    }
}

void consos::setCommentaire(QString com)
{

    QSqlQuery q(db);
    q.prepare("UPDATE consos SET commentaire =:com WHERE id=:id");
    q.bindValue(":com", com);
    q.bindValue(":id", id);

    if(q.exec())
    {
        commentaire = com;
    }
}

void consos::setNom(QString name)
{

    QSqlQuery q(db);
    q.prepare("UPDATE consos SET nom = :nom WHERE id=:id");
    q.bindValue(":nom", name);
    q.bindValue(":id", id);

    if(q.exec())
    {
        nom = name;
    }
}

void consos::setPrix(double px)
{

    QSqlQuery q(db);
    q.prepare("UPDATE consos SET prix = :px WHERE id=:id");
    q.bindValue(":px", px);
    q.bindValue(":id", id);

    if(q.exec())
    {
        prix = px;
    }
}

void consos::setStock(int now, int add)
{
    QSqlQuery q(db);
    q.prepare("CALL modifier_stock(:id, :init, :add)");
    q.bindValue(":init", now);
    q.bindValue(":add", add);
    q.bindValue(":id", id);

    if(q.exec())
    {
        stock = now + add;
    }
}

void consos::setMotsclefs()
{
    QString tmp = "";
    for(int i=0; i<motsclefs.count(); i++)
    {
        if(i!=0) tmp += " ";
        tmp += motsclefs.at(i);
    }

    QSqlQuery q(db);
    q.prepare("UPDATE consos SET motsclefs = :mc WHERE id=:id");
    q.bindValue(":mc", tmp);
    q.bindValue(":id", id);
    q.exec();
}

void consos::addMotsclefs(QString mot)
{
    motsclefs.append(mot);

    setMotsclefs();
}

void consos::delMotsclefs(int i)
{
    motsclefs.removeAt(i);

    setMotsclefs();
}

int consos::getCategorie()
{
    return categorie;
}

QString consos::getCategorieName()
{
    QSqlQuery q(db);
    q.prepare("SELECT nom FROM categories WHERE id = :i");
    q.bindValue(":i", categorie);
    q.exec();
    q.first();
    return q.value(0).toString();
}

int consos::getId()
{
    return id;
}

QString consos::getCommentaire()
{
    return commentaire;
}

QStringList consos::getMotsclefs()
{
    return motsclefs;
}

QString consos::getNom()
{
    return nom;
}

bool consos::getActif()
{
    return actif;
}

double consos::getPrix()
{
    return prix;
}

int consos::getStock()
{
    return stock;
}

void consos::updateDatabase()
{
    setCategorie(getCategorie());
    setNom(getNom());
    setPrix(getPrix());
    setMotsclefs();
    setCommentaire(getCommentaire());
}
